package leetcode;
/**
 * 82.删除排序链表中的重复元素Ⅱ：删掉出现过一次以上的元素
 * 存在一个按升序排列的链表，给你这个链表的头节点 head ，请你删除链表中所有存在数字重复情况的节点，只保留原始链表中 没有重复出现 的数字。
 * 返回同样按升序排列的结果链表。
 *
 * 输入：head = [1,2,3,3,4,4,5]
 * 输出：[1,2,5]
 */
public class Num_82 {
    public ListNode deleteDuplicates(ListNode head) {
        ListNode dummyHead = new ListNode(-101);
        dummyHead.next = head;
        ListNode prev = dummyHead;
        ListNode cur = prev.next;
        while(cur != null){
            //建立一个计数器表示相同元素的个数
            int count = 1;
            //比较cur和cur.next的值
            while(cur.next != null && cur.val == cur.next.val){
                //cur和cur.next相等，则计数器+1
                count++;
                //且让cur右移后，再循环和它的下一位作比较
                cur = cur.next;
            }

            // >1 ，则说明有相同元素
            if(count > 1){
                //此次连接，直接跳过相同的元素
                prev.next = cur.next;
            }else{
                //没有相同的元素，则不删除，让prev右移
                prev = prev.next;
            }

            //每次循环，cur的起始一直是prev的下一位
            cur = prev.next;
        }
        return dummyHead.next;
    }
}
